rcar_gen3: drivers: qos: Add function to configure DBSC QoS settings from a table
authorMarek Vasut <[email protected]>
Fri, 14 Jun 2019 13:55:04 +0000 (15:55 +0200)
committerMarek Vasut <[email protected]>
Mon, 17 Jun 2019 13:13:22 +0000 (15:13 +0200)
The DBSC QoS settings can be programmed by iterating over a table with
register-value pairs and writing those to the registers, add function
to do just that. Subsequent patches will convert the DBSC QoS setting
functions for each SoC to this new function.

Signed-off-by: Marek Vasut <[email protected]>
Change-Id: I949c46a0f032661a58000cb5f7829349e973438c

drivers/staging/renesas/rcar/qos/qos_common.h
drivers/staging/renesas/rcar/qos/qos_init.c

index 64a89f80fcd7d98e1face62e4985261a7f5dc63d..2c130aee0fbc819d939af378c220d517f5adf343 100644 (file)
@@ -128,7 +128,15 @@ typedef struct {
        uint64_t value;
 } mstat_slot_t;
 
+struct rcar_gen3_dbsc_qos_settings {
+       uint32_t        reg;
+       uint32_t        val;
+};
+
 extern uint32_t qos_init_ddr_ch;
 extern uint8_t qos_init_ddr_phyvalid;
 
+void rcar_qos_dbsc_setting(struct rcar_gen3_dbsc_qos_settings *qos,
+                          unsigned int qos_size, bool dbsc_wren);
+
 #endif /* QOS_COMMON_H */
index 7a564cf7366a9b8ec8d3eb32af2ad542292bc42d..884e031ca93b453375851b45577e46c6f32b6279 100644 (file)
@@ -11,6 +11,7 @@
 
 #include "qos_init.h"
 #include "qos_common.h"
+#include "qos_reg.h"
 #if RCAR_LSI == RCAR_AUTO
 #include "H3/qos_init_h3_v10.h"
 #include "H3/qos_init_h3_v11.h"
@@ -389,3 +390,20 @@ uint32_t get_refperiod(void)
        return refperiod;
 }
 #endif
+
+void rcar_qos_dbsc_setting(struct rcar_gen3_dbsc_qos_settings *qos,
+                          unsigned int qos_size, bool dbsc_wren)
+{
+       int i;
+
+       /* Register write enable */
+       if (dbsc_wren)
+               io_write_32(DBSC_DBSYSCNT0, 0x00001234U);
+
+       for (i = 0; i < qos_size; i++)
+               io_write_32(qos[i].reg, qos[i].val);
+
+       /* Register write protect */
+       if (dbsc_wren)
+               io_write_32(DBSC_DBSYSCNT0, 0x00000000U);
+}